﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SistemaFacturacion.Entidades;
using System.IO;
using System.Xml;

namespace SistemaFacturacion
{
    public class XmlManager
    {
        #region Atributos
        #endregion

        #region Constructor
        /// <summary>
        /// Constructor vacío
        /// </summary>
        public XmlManager()
        {
        }
        #endregion

        #region Métodos públicos
        /// <summary>
        /// Método que se encarga de crear un documento en el xml de
        /// facturas
        /// </summary>
        /// <param name="document">Documento a guardar</param>
        /// <param name="filePath">Dirección del archivo a guardar el documento</param>
        /// <returns>Si tuvo éxito o no</returns>
        public bool SaveInvoice(Document document, String filePath)
        {
            XmlDocument xmlDoc = new XmlDocument();

            if (File.Exists(filePath))
                xmlDoc.Load(filePath);
            else
            {
                XmlElement root = xmlDoc.CreateElement(Constants.TAG_ROOT_NAME_DOCUMENTS);
                xmlDoc.AppendChild(root);
            }

            XmlElement doc = xmlDoc.CreateElement(Constants.TAG_NODE_NAME_DOCUMENT);
            doc.SetAttribute(Constants.TAG_ATT_NAME_DOC_CODE, document.DocumentCode.ToString());
            doc.SetAttribute(Constants.TAG_ATT_NAME_DOC_POST_DATE, document.PostingDate.ToString());
            doc.SetAttribute(Constants.TAG_ATT_NAME_DOC_DEL_DATE, document.DeliveryDate.ToString());
            doc.SetAttribute(Constants.TAG_ATT_NAME_DOC_CURRENCY, document.Moneda);
            doc.SetAttribute(Constants.TAG_ATT_NAME_DOC_CLIENT, document.ClientCode);

            foreach(DocDetail detail in document.Detail)
            {
                XmlElement art = xmlDoc.CreateElement(Constants.TAG_NODE_NAME_ITEM);
                art.SetAttribute(Constants.TAG_ATT_NAME_ITEM_CODE, detail.ItemCode);
                art.SetAttribute(Constants.TAG_ATT_NAME_ITEM_ROOM, detail.StoreRoom);
                art.SetAttribute(Constants.TAG_ATT_NAME_ITEM_QUANTITY, detail.Quantity.ToString());
                art.SetAttribute(Constants.TAG_ATT_NAME_ITEM_TAX, detail.TaxType);

                doc.AppendChild(art);
            }

            xmlDoc.FirstChild.AppendChild(doc);

            try
            {
                xmlDoc.Save(filePath);
            }
            catch (XmlException ex)
            {
                return false;
            }

            return true;
        }
        #endregion
    }
}
